package com.itsoku;

import java.util.concurrent.CompletableFuture;

/**
 * @Description
 * @Author fengleifl-hzgs
 * @Date 2025/8/14
 * @since
 */
public class Main {
    public static void main(String[] args) {

        CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
            throw new RuntimeException("原始异常");
        });

        CompletableFuture<Integer> handled = future.exceptionally(ex -> {
            System.err.println("捕获到原始异常:");
            ex.printStackTrace();
            //
            // 可以选择重新抛出原始异常
            // throw new CompletionException(ex);

            // 或者包装成新的异常
            throw new RuntimeException("包装后的异常", ex);
        });

        try {
            Integer result = handled.join();
            System.out.println("结果: " + result);
        } catch (Exception e) {
            System.out.println("---------------------------------------------");
            System.err.println("主线程捕获到的异常:");
           // e.printStackTrace();
        }
    }

    //public static void main(String[] args) {
    //    CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
    //        // 模拟可能失败的异步计算
    //        int result = 10 / 0; // 这会抛出 ArithmeticException
    //        return result;
    //    });
    //
    //    CompletableFuture<Integer> handled = future.exceptionally(ex -> {
    //        System.err.println("计算过程中发生异常:");
    //        System.err.println("异常类型: " + ex.getClass().getName());
    //        System.err.println("异常消息: " + ex.getMessage());
    //        System.err.println("堆栈跟踪:");
    //        System.out.println("----------------");
    //        ex.printStackTrace();
    //        return 0; // 提供默认值
    //    });
    //
    //    Integer result = handled.join();
    //    System.out.println("处理后的结果: " + result);
    //}
}